package main

import "fmt"

func main() {
	length, width := 6.7, -9.1
	area, err := rectArea(length, width)
	if err != nil {
		fmt.Println(err)
		if err, ok := err.(*areaError1); ok {
			if err.lengthNegative() {
				fmt.Printf("error: 长度：%.2f，小于零\n", err.length)
			}
			if err.widthNegative() {
				fmt.Printf("error: 宽度：%.2f，小于零\n", err.width)
			}
		}
		return
	}
	fmt.Println("矩形的面积是：", area)
}

type areaError1 struct {
	msg    string  //错误的描述
	length float64 //发生错误时，矩形的长度
	width  float64 //发生错误时，矩形的宽度
}

func (e *areaError1) Error() string {
	return e.msg
}

func (e *areaError1) lengthNegative() bool {
	return e.length < 0
}

func (e *areaError1) widthNegative() bool {
	return e.width < 0
}

func rectArea(length, width float64) (float64, error) {
	msg := ""
	if length < 0 {
		msg = "长度小于零"
	}
	if width < 0 {
		if msg == "" {
			msg = "宽度小于零"
		} else {
			msg += "，宽度也小于零"
		}
	}
	if msg != "" {
		return 0, &areaError1{msg, length, width}
	}
	return length * width, nil
}
